/*
指针是什么

内存
    掉电丢失存储
    程序运行的家

    在内存中 每一个字节 都又一个地址

    1字节 = 8位  8个二进制
    1字节 = 1111 1111


程序的运行机制
    1、当我们的程序 没有 启动的时候 存放再 硬盘上面      掉电不丢失

        程序的执行 是需要 和 CPU 快速通讯    所以我们需要用到内存  缓存 寄存器

    2、将运行所需的资源 从硬盘 加载 到 内存

        内存                                掉电丢失存储


前面说了 程序是运行在内存上的 ，那么 变量是不是在内存？
    答： 是的
那么 变量是否也占用 内存(地址)呢？
    答： 是的

    // 常规变量中
    int val = 10;

    val 标识符  用于表示 val 这个内存的地址

    // 指针
    指针是C语言里面的特殊变量 不用于存储实际的数据  而是 用于指向其他变量的内存地址

    指针内部所存储的数据 为  其他变量的地址

    例如
    int val = 10000000;
    int * ptr = &val;       // 获取 val 的地址 然后 赋值给 ptr  
                            // 此时 ptr 的数据 val 的地址


    因为 一个变量 包含  
    val = 
        地址   0x0001
        数据   10
    ptr = 
        地址   0x0123
        数据   0x0001



关于符号的问题

    当 *  在类型后

    int * ptr = null;

    int *  是一个类型  请你把他当作整体  
            此时 int *  所代表的 int 类型的指针 只能指向 int 类型的数据


    当 * 不在类型后

    *ptr   代表 解数据
        通过 *   从地址 追查到数据


    & 追查改变量的地址
*/


#include <stdio.h>
int main(int argc, char const *argv[])
{
    int val = 10;
    int * ptr = &val;

    *ptr = 50;

    printf("val 地址 = %p\n" , &val);
    printf("val 数据 = %d\n" , val);

    printf("ptr 地址= %p\n" , &ptr);
    printf("ptr 数据= %p\n" , ptr);
    // 0x7ffe6698976c
    return 0;
}
